]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
st/focus-manager: Check for NULL instead of stage to exit loop
authorJonas Dreßler <verdre@v0yd.nl>
Fri, 1 Mar 2024 17:39:18 +0000 (18:39 +0100)
committerRobert Mader <robert.mader@posteo.de>
Thu, 28 Aug 2025 18:23:13 +0000 (18:23 +0000)
In st_focus_manager_stage_event() we get the current key-focus actor from
the stage, and then enter a loop where we iterate through parents until we
get to the stage. If the key-focus actor is not a descendent of the stage
for some reason, this loop will never exit and we've locked up.

We can easily prevent the endless loop by checking for NULL as the exit
condition instead of checking for the stage, so do that instead.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3220>

src/st/st-focus-manager.c

index a39845d9f28620f8da715550aa62ec1789ec404f..41f3380c4dd874eddd29bb9b7e9893fbb50cba51 100644 (file)
@@ -113,7 +113,7 @@ st_focus_manager_stage_event (ClutterActor *stage,
   if (!focused)
     return FALSE;
 
-  for (group = focused; group != stage; group = clutter_actor_get_parent (group))
+  for (group = focused; group != NULL; group = clutter_actor_get_parent (group))
     {
       if (g_hash_table_lookup (manager->groups, group))
         {